// zabbix 版本：7.0
// 这是zabbix配置webhook告警时需要使用到的Javascripts代码。
// 这是针对告警时时间-8小时的处理代码。

try {
    var params = JSON.parse(value),
        req = new HttpRequest(),
        resp;

    // 时间处理函数：加8小时并处理日期进位
    function adjustTime(dateStr, timeStr) {
        var timeParts = timeStr.split(':'),
            hours = parseInt(timeParts[0], 10),
            minutes = parseInt(timeParts[1], 10),
            seconds = parseInt(timeParts[2], 10);

        // 加8小时
        hours += 8;

        // 创建日期对象
        var dateParts = dateStr.split('.'), // 假设格式为 YYYY.MM.DD
            year = parseInt(dateParts[0], 10),
            month = parseInt(dateParts[1], 10) - 1, // JavaScript月份从0开始
            day = parseInt(dateParts[2], 10);

        var date = new Date(year, month, day, hours, minutes, seconds);

        // 格式化输出
        var newYear = date.getFullYear(),
            newMonth = ('0' + (date.getMonth() + 1)).slice(-2),
            newDay = ('0' + date.getDate()).slice(-2),
            newHours = ('0' + date.getHours()).slice(-2),
            newMinutes = ('0' + date.getMinutes()).slice(-2),
            newSeconds = ('0' + date.getSeconds()).slice(-2);

        return {
            date: newYear + '.' + newMonth + '.' + newDay,
            time: newHours + ':' + newMinutes + ':' + newSeconds
        };
    }

    // 处理故障时间
    var adjustedProblemTime = adjustTime(params.EventDate, params.EventTime);

    // 构建消息体
    var msg = {
        msg_type: 'post',
        "content": {
            "post": {
                "zh_cn": {
                    "title": params.Subject,
                    "content": [
                        [
                            {
                                "tag": "text",
                                "text": params.Message
                            },
                            {
                                "tag": "text",
                                "text": "故障时间: " + adjustedProblemTime.date + " " + adjustedProblemTime.time + "\n"
                            }
                        ]
                    ]
                }
            }
        }
    };

    // 如果不是PROBLEM状态，添加恢复时间
    if (params.EventStatus != 'PROBLEM') {
        var adjustedRecoveryTime = adjustTime(params.RecoveryDate, params.RecoveryTime);

        msg.content.post.zh_cn.content[0].splice(2, 0, {
            "tag": "text",
            "text": "恢复时间: " + adjustedRecoveryTime.date + " " + adjustedRecoveryTime.time + "\n"
        });
    }

    // 设置代理（如果有）
    if (params.HTTPProxy) {
        req.setProxy(params.HTTPProxy);
    }

    // 设置请求头
    req.addHeader('Content-Type: application/json');

    // 发送HTTP Post请求
    resp = req.post(params.URL, JSON.stringify(msg));

    // 判断HTTP请求返回的状态码
    if (req.getStatus() != 200) {
        throw 'Response code: ' + req.getStatus();
    }

    // 返回响应结果
    resp = JSON.parse(resp);
    return JSON.stringify(resp);

} catch (error) {
    throw 'Failed with error: ' + error;
}